package com.example.foldertreeview;

import android.util.Log;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;
/**
 * 华为手机录音文件存储位置：
 * EMUI 8.0 以下：文件管理 > 本地 > 内部存储 > record；
 * EMUI 8.x及以上：文件管理 > 本地 > 内部存储 > Sounds > CallRecord。
 *
 *小米 MIUI/sound_recorder/call_rec
 *vivo Recordings/Record/Call
 * oppo手机录音在文件管理--存储--Recordings文件夹
 *
 * xiaomi： MIUI/sound_recorder/call_rec
 * huawei：EMUI 8.x及以上 Sounds/CallRecord  ， EMUI 8.0 以下 record
 * honor：Sounds/CallRecord  或 record
 * samsung：
 * oppo：
 * vivo：
 */

public class FileTools {

    public static List<File> searchFiles(File folder) {
        List<File> result = new ArrayList<>();
        if (folder.isFile())
            result.add(folder);
        Log.e("路径>>>>>: ", folder.getName());
        File[] files = folder.listFiles();
        for (File file : files) {
            Log.e("文件>>>>>: ", file.getName());
        }
        File[] subFolders = folder.listFiles(new FileFilter() {
            @Override
            public boolean accept(File file) {
                if (file.isDirectory() && checkFileName(file.getName())) {
                    return true;
                }
                if (checkFileNameEnd(file.getName())) {
                    return true;
                }
                return false;
            }
        });

        if (subFolders != null) {
            for (File file : subFolders) {
                if (file.isFile()) {
                    // 如果是文件则将文件添加到结果列表
                    result.add(file);
                } else {
                    // 如果是文件夹，则递归调用本方法，然后把所有的文件加到结果列表中
                    result.addAll(searchFiles(file));
                }
            }
        }
        return result;
}

    //匹配目录规则
    private static boolean checkFileName(String name){
        String[] rule=App.getApp().getFileNameRule().split(",");
        for (String folder : rule){
            if(name.toLowerCase().contains(folder.toLowerCase())){
                return true;
            }
        }
        return false;
    }

    //匹配后缀规则
    private static boolean checkFileNameEnd(String name){
        //后缀 数组
        String[] rule= App.getApp().getFileNameEndRule().split(",");
        for (String suffix : rule){
            if(name.toLowerCase().contains(suffix.toLowerCase())){
                return true;
            }
        }
        return false;
    }

    //从上面的函数中获取到了符合规则的?件列表然后，获取修改时间是最新的?件。


    //获取修改时间是最新的文件
    public static File getLastFile(List<File> files){
        File myfile = null;
        long fileTime = 0;
        for (File file : files){
            if(file.lastModified() > fileTime){
                myfile = file;
                fileTime = file.lastModified();
            }
        }
        return myfile;
    }
    //然后还要检测这个文件跟目前这个通话的时间上不能差距太大，我发现vivo的通话记录的date跟录文件名后面的目期大概差了0-20s左右
    //不固定，所以写了个一分钟的区间。当然你可以根据更多的测试去把这个区间调的更加准确。

    //检测这个文件是否符合要求
    //time是从监听通话挂断时记录的时间戳。
    public static boolean checkFile(File file,long time){
        return Math.abs(time - file.lastModified()) < 5*1000;
    }
}
